Здравствуйте, Я написал Static NAT. 1) внутри архива файлы расположены так, как они были расположены у меня в workspace для успешной работы. это один файл из папки mininet и папка lvk_task, в которой находится свитч 2) Я удалил папку build, т.к. она много весит, поэтому сначала нужно сделать "make bm" 3) Можно открыть файл run_add_demo_entries.sh и увидеть топологию того, что запускает mininet 4) мой NAT - static, т.е. он заменяет у пакета конкретные ip адреса из внутренней сети, на конкретные ip адреса из внешней сети 5) все умеют делать ping всех, за исключением h3-h4 - они находятся в одной подсети, и потому если запустить ping, они не пользуются default gateway (заданный в скрипте mininet), а шлют arp запросы, которые я обрабатывать не умею. Зато для всех остальных пар хосты находятся в разных подсетях и потому пользуют default gateway, однако arp не шлют, потому что в mininet нужное значение сразу прописывается при запуске в каждый хост. 6) свитч состоит из 7 таблиц: - таблица определения, что пакет пришёл из intranet (определяется по тому, из какого порта свитча прилетел пакет) - таблица определения, что пакет идёт в internet (определяется по ipv4 dstAddr - если пакет идёт не в сеть intranet, то он идёт в интернет) - таблица подмены source адреса, вызываемая, если пакет идёт из intranet в интернет - таблица подмены destination адреса, вызываемая, если пакет пришёл из интернета в intranet 3 стандартные таблицы, которые я взял из simple_router - таблица определения, в какой порт коммутатора выкинуть пакет по dstAddr ipv4 - таблица подмены dst mac в зависимости от dstAddr (обычная операция, свойственная рутеру) - таблица подмены src mac в зависимости от того, из какого порта рутер выкинет пакет (тоже обычная операция, но вообще говоря, её можно убрать, потому что в данном конкретном примере, всё сработает и без неё (т.к. есть другая процедура через mininet - как заставить пакет с хоста быть посланным в коммутатор)) 7) Для запуска нужно вызвать "run_demo.sh" - она запустит mininet топологию, автоматически зальёт правила на свитч/ 8) В результате на моём нате можно задать, какие порты рутера являются внутренними, а какие внешними, задать статическое отображение одних ip-адресов на другие ip-адреса, а также статически задать данные для последних 3-х таблиц, используемых для обычной маршрутизации пакетов. 9) Всё происходит исключительно статически, никакого openflow и обучения В прикреплённом файле "How to build p4" находится необходимый комплект команд, чтобы скомпилировать p4 фреймворк, switch и запустить его в режиме openflow с ryu (вряд ли это можно считать частью задания).